package service.impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import dao.ProvinceDao;
import dao.impl.ProvinceDaoImpl;
import domain.Province;
import redis.clients.jedis.Jedis;
import service.ProvinceService;
import util.JedisPoolUtils;

import java.util.List;

/**
 * @author Mc.Chai
 * @program: JavaWeb
 * @create 2022-04-23-15:26 15:26
 */
public class ProvinceServiceImpl implements ProvinceService {
    private ProvinceDao dao=new ProvinceDaoImpl();
    /**
     * 查询所有的省份
     *
     * @return 所有省份的集合
     */
    @Override
    public List<Province> findAll() {
        List<Province> list = dao.findAll();
        return list;
    }

    /**
     * 缓存的实现
     *  注意：使用redis缓存一些不经常发生变化的数据。
     * 	* 数据库的数据一旦发生改变，则需要更新缓存。
     * 		* 数据库的表执行 增删改的相关操作，需要将redis缓存数据情况，再次存入
     * 		* 在service对应的增删改方法中，将redis数据删除。
     * @return 所有省份的json数据
     */
    @Override
    public String findAllJson() {
        Jedis jedis = JedisPoolUtils.getJedis();
        String province_Json = jedis.get("province");
        if (province_Json==null||province_Json.length()==0){
            System.out.println("缓存中没有数据");
            List<Province> list = findAll();
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_Json=mapper.writeValueAsString(list);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            //将数据写入到缓存中
            jedis.set("province",province_Json);
        }else{
            System.out.println("直接使用缓存中的数据");
        }
        jedis.close();
        return province_Json;
    }
}
